#ifndef _DECORATOR_H_
#define _DECORATOR_H_

class AbstractHero
{
public:
    virtual void showStatus() = 0;
    int _Hp;
    int _Mp;
    int _At;
    int _Df;
};

class HeroA : public AbstractHero
{
public:
    HeroA();
    virtual void showStatus();
};

// 给英雄穿上某个装饰物
class AbstractEquipment : public AbstractHero
{
public:
    AbstractEquipment(AbstractHero* hero);
    virtual void showStatus(){};
    AbstractHero* _pHero;
};

// 给英雄穿上狂徒铠甲
class KuangtuEquipment : public AbstractEquipment
{
public:
    KuangtuEquipment(AbstractHero* hero)
        : AbstractEquipment(hero){}

    // 增加额外的功能
    void AddKuangtu();

    virtual void showStatus();
};

// 给英雄带上无尽之刃
class WujinzhirenEquipment : public AbstractEquipment
{
public:
    WujinzhirenEquipment(AbstractHero* hero)
        : AbstractEquipment(hero){}
    
    void AddWujinzhiren();
    virtual void showStatus();
};
#endif // _DECORATOR_H_